/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Funcionalidades;

import br.com.beautycenter.DAO.PersisteFeriado;
import br.com.beautycenter.bean.Feriado;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;
import org.joda.time.Days;

/**
 *
 * @author Magela
 */
public class Data {
    public static SimpleDateFormat formatoDataExtendida = new SimpleDateFormat("yy 'ano(s), ' MM 'mes(es) e ' dd 'dia(s)'");
    public static SimpleDateFormat formatoDataConvencional = new SimpleDateFormat("dd/MM/yyyy");
    public static SimpleDateFormat fomatoHora = new SimpleDateFormat("HH:mm:ss");
    public static SimpleDateFormat horaSimpels = new SimpleDateFormat("HH:mm");
    
    /**
     * Retorna a idade pela data de nascimento passada como parâmetro.Única verificação a ser feita está no fato da pessoa
     * já ter feito aniversário no ano corrente ou não.
     * @param nascimento
     * @return 
     */
    public static String retornarIdade(Date nascimento){
        DateTime data = new DateTime(nascimento);
        DateTime atual = new DateTime();
        
        int dias = Days.daysBetween(data, atual).getDays();
        
        int ano = dias / 360;
        int mes = (dias % 360)/30;
        int dia = (dias % 360) % 30;
        
        System.out.println("meses: " + dias % 360);
        if(!verificarAniversario(nascimento)) ano--;
        String s = String.valueOf(ano) + " ano(s), " + String.valueOf(mes) + " mes(es) e " + String.valueOf(dia) + " dia(s)";
        System.out.println(s);
        
        return s;
    }
    
    /**
     * 
     * @return Verifica se ja fez aniversario
     */
    public static boolean verificarAniversario(Date dataNascimento){
        DateTime nascimento = new DateTime(dataNascimento);
        DateTime aniversario = new DateTime(new DateTime().getYear(), 
                nascimento.getMonthOfYear(), nascimento.getDayOfMonth(), 0, 0);
        if(aniversario.isBeforeNow()) return true;
        return false;
    }
    
    
    public static boolean verificarLimiteHora(Date hora, Date limiteInferior, Date limiteSuperior){
        DateFormat dFormat = DateFormat.getTimeInstance(DateFormat.SHORT, new Locale("pt", "BR"));
        String[] vHora = dFormat.format(hora).split(":");
        String[] vLimiteInferior = dFormat.format(limiteInferior).split(":");
        String[] vLimiteSuperior = dFormat.format(limiteSuperior).split(":");
        
        if(Integer.valueOf(vHora[0]) < Integer.valueOf(vLimiteInferior[0])) return false;
        else if(Integer.valueOf(vHora[0]).intValue() > Integer.valueOf(vLimiteSuperior[0]).intValue()) return false;
        else if(Integer.valueOf(vHora[0]).intValue() == Integer.valueOf(vLimiteSuperior[0]).intValue() && 
                Integer.valueOf(vHora[1]).intValue() > Integer.valueOf(vLimiteSuperior[1]).intValue()
                ) return false;
        
        return true;
    }
    
    /**
     * Verifica se a data passada como parâmetro é feriado ou é sábado
     * @param data
     * @return 
     */
    public static boolean isFeriadoOuSabado(Date data){
        PersisteFeriado persisteFeriado = new PersisteFeriado();
        DateTime d = new DateTime(data.getTime());
        d = new DateTime(d.year().get(), d.monthOfYear().get(), d.dayOfMonth().get(), 0, 0, 0);
        
        if(d.getDayOfWeek() == DateTimeConstants.SATURDAY) return true; //é sábado
        
        //pesquisa na lista de feriados
        for(Feriado item: persisteFeriado.retornarFeriado()){
            DateTime dItem = new DateTime(item.getDtFeriado().getTime());
            dItem = new DateTime(dItem.year().get(), dItem.monthOfYear().get(), dItem.dayOfMonth().get(), 0, 0, 0);
            
            //se for igual é um feriado
            if(d.isEqual(dItem.getMillis())){
                return true;
            }
        }
        
        return false; //não é um feriado
    }
    
    public static boolean compararDatas(DateTime data1, DateTime data2){
        DateTime aux1 = new DateTime(data1.getYear(), data1.getMonthOfYear(), data1.getDayOfMonth(), 0, 0, 0);
        DateTime aux2 = new DateTime(data2.getYear(), data2.getMonthOfYear(), data1.getDayOfMonth(), 0, 0, 0);
        
        
        return aux1.equals(aux2);
    }
}
